/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hhf.flex.annotations.services;

import hhf.flex.ascreator.ASServiceCreatorInterface;
import hhf.flex.ascreator.creators.ASReferenceGetterServiceCreator;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Cette annotation définit que le résultat retourné par la methode annotée est de type réferentiel,
 * le résultat retourné n'est jamais ou quasi jamais modifié.
 * De ce fait, on recupere en priorité les données stoké en base locale.
 * @author HHFrancois
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ReferenceGetter {

	boolean needEntityClass() default true;

	Class<? extends ASServiceCreatorInterface> creator() default ASReferenceGetterServiceCreator.class;

	/**
	 * Définit la retention du referentiel en seconde.
	 * Par défault 1 heure (3600 seconde)
	 * si le client demande le referentiel moins d'une heure avant le dernier chargement de la donnée,
	 * les données sont récuperé en base local.
	 * @return
	 */
	long retention() default 3600;

	/**
	 * Lorsqu'il est a true, il permet, en dernier recours (pas d'accès au serveur),
	 * de récupérer les données en cache local même si elles sont périmées plutôt que de 
	 * lever une exception.
	 * @return 
	 */
	boolean acceptOutOfDate() default false;

	/**
	 * Définit la politique à appliquer à l'appel du service lorsque
	 * le serveur est offline et les données en cache périmées.
	 * @return 
	 */
	OfflinePolicyEnum offlinePolicy() default OfflinePolicyEnum.ABORT;


}
